classDiagram
IFactorsFactoryGameInstance --> NFactorsFactoryClient
NFactorsFactoryClient *-- FactorArray
FactorArray <|.. Factor1
FactorArray <|.. Factor2
FactorArray <|.. Factor3
FactorArray <|.. Factor4
FactorArray <|.. Factor5

class Factor1 {
    &lt;&lt;For Action&gt;&gt;
}
class Factor2 {
    &lt;&lt;For Dialog&gt;&gt;
}
class Factor3 {
    &lt;&lt;For Alignment BENEVOLENT&gt;&gt;
}
class Factor4 {
    &lt;&lt;For Alignment EVIL&gt;&gt;
}
class Factor5 {
    &lt;&lt;For Alignment NEUTRAL&gt;&gt;
}

class IFactorsFactoryGameInstance {
    &lt;&lt;interface&gt;&gt;  &lt;&lt;public&gt;&gt;
    +GetFactorsFactoryClient() NPointSystemClient
}

class NFactorsFactoryClient {
    &lt;&lt;public&gt;&gt;
    +CreateFactor(FString Name) void
    +GetFactor(TArray&lt;FString&gt; Names) TArray&lt;FactorState&gt;
    +AddFactor(TArray&lt;FString&gt; Names, Factor) void
}
